package it.scambiocorse.areaprivata.controller;

import java.sql.Timestamp;

import it.scambiocorse.dao.CodaService;
import it.scambiocorse.dao.ServizioService;
import it.scambiocorse.model.ServizioType;
import it.scambiocorse.model.UtenteType;
import it.scambiocorse.utils.Costanti;
import it.scambiocorse.utils.ResourceManager;
import it.scambiocorse.utils.Utils;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class PassaServizioInAreaPubblicaFormController implements Controller{
	final Logger logger = Logger.getLogger(getClass());
	
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
				logger.warn("*** Sono in PassaServizioInAreaPubblicaFormController-handleRequest ");
		
		    UtenteType dettaglio = null;
		    try {
					    HttpSession session = request.getSession(false);
							if (session == null) {
								logger.warn("Sessioe Scaduta");
								return new ModelAndView("sessioneScaduta");
							} else {
									dettaglio = (UtenteType)session.getAttribute("dettaglio");
									if (dettaglio == null ) {
											return new ModelAndView("sessioneScaduta");
									}
							}
							ServizioService servizioDao = (ServizioService)ResourceManager.getBean("servizioService");
							int idServ = Integer.parseInt(request.getParameter("idServ"));
							ServizioType serv = null;//servizioDao.dettaglioServizio(idServ, dettaglio.getIdUser());
							
							
							/**** Inizio Controlli 
							 * MUST BE VALID:
							 * 	PICKUP TK
							 * 	DROPOFF TK
							 * 	DATAORA
							 * 	CODE == NULL
							 * */
							
							boolean check = true;
							
							if (serv.getIdUserInse() != dettaglio.getIdUser()) {
								check = false;
								logger.warn("Cosa sta cercando di fare? :eek: ");
							}
							
							if (!Utils.isValid(serv.getPickUpToken())) {
								logger.warn("Picku Up Token NON valido");
								check = false;
							}
							if (!Utils.isValid(serv.getDropOffToken())) {
								logger.warn("Drop off Token NON valido");
								check = false;
							}
							logger.warn("Controllo che passino almeno 3 ore dall'esecuzione del servizio");
							Timestamp dataOra = serv.getDataora();
							Timestamp now = Utils.getSysDate();
							long dataOraLessnow = dataOra.getTime() - now.getTime();
							
							if (dataOraLessnow < Costanti.TRE_ORE_MS) {
								logger.warn("Il servizio scade tra meno di 3 ore, passaggio all'area pubblica FALLITO");
								check = false;
							}
							
							CodaService codaDao = (CodaService)ResourceManager.getBean("codaService");
							
							if (codaDao.getCodePerServ(idServ) != null) {
								logger.warn("Ci sono code attive per questo servizio, puoi solamente annullare il servizio");
								check = false;
							}
							
							if (check) {
								logger.warn("Procedo al passaggio del servizio in AREA PUBBLICA");
								servizioDao.passaServizioInAreaPubblica(serv.getIdServ());
							} else {
								logger.warn("Passaggio in area pubblica FALLITO");
							}
							
							
							
							
							
							
							ModelAndView mav = new ModelAndView("servizioDettaglio");
			
							
						return mav;
						
				}catch (Exception e) {
					logger.error("SI E' VERIFICATO UN ERRORE");
					logger.error("Utente: "+dettaglio.getIdUser());
					logger.error(e);
					return new ModelAndView("gestioneErrore").addObject(e);
				}
				
			}
		  
}
	
